package com.hliushi.learn.bean;

/**
 * @author llhuang10
 * @date 2021/10/8 18:35
 */
public class StaticTest extends FatherStaticTest {
    public static int k = 0;
    public static int n = 99;
    public static int i = print("i");

    static {
        print("子类静态代码块");
    }

    public int j = print("j");

    {
        print("子类构造块");
    }

    public StaticTest(String s) {
        System.out.println(++k + ":" + s + "\ti=" + i + "\tn=" + n);
        ++i;
        ++n;
    }

    public static int print(String s) {
        System.out.println(++k + ":" + s + "\ti=" + i + "\tn=" + n);
        ++n;
        return ++i;
    }

    public static void main(String[] args) {
        StaticTest.print("ben");

        // 打印结果
        // 父类静态代码快 fi = 100
        // 1:i	i=0	n=99
        // 2:子类静态代码块	i=1	n=100
        // 3:ben	i=2	n=101

        // 结论 Java的程序加载过程 --- 类直接调用静态方法(func1)
        // 类在调用静态方法之前, 加载顺序如下
        // Step1: 父类类中静态变量(类变量)
        // Step2: 父类中静态代码块
        // Step3: 子类中的静态变量(类变量)
        // Step4: 子类中的静态代码块
        // Step5: 执行调用的静态方法(func1)

    }
}
